#include "led.h"


void  LED_Init(void)
{
	rcu_periph_clock_enable(LED_GPIO_Clk);	

    gpio_mode_set(LED_GPIO_Port,GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,LED_GPIO_Pin);
    gpio_output_options_set(LED_GPIO_Port,GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,LED_GPIO_Pin);
	gpio_bit_set(LED_GPIO_Port, LED_GPIO_Pin);
}

/*延时函数*/
void Delay(uint32_t nCount) 
{ 
	for(; nCount != 0; nCount--); 
}  

/*LED闪烁一次*/ 
void LED_Loop(int on,int off) 
{ 
  gpio_bit_reset(LED_GPIO_Port,LED_GPIO_Pin);
	Delay(on);
  gpio_bit_set(LED_GPIO_Port,LED_GPIO_Pin);
	Delay(off); 
} 

/*呼吸一次(耗时较长) 调用此呼吸函数的任务优先级要最低*/ 
void LED_Breath(void) 
{ 
	static int time=0; 

/*渐亮*/  
	time = MAX_TIME;  
	while(1)
	{
		time -= SPEED;
		LED_Loop(MAX_TIME-time,time);
		if(time < SPEED)    
			break;  
	} 
  	/*渐暗*/  
	time = MAX_TIME;
	while(1)
	{
		time -= SPEED;
		LED_Loop(time,MAX_TIME-time);
		if(time < SPEED)    
			break;  
	}  
}

void LED_ON(void)
{
  gpio_bit_reset(LED_GPIO_Port,LED_GPIO_Pin);	
}

void LED_OFF(void)
{
	gpio_bit_set(LED_GPIO_Port,LED_GPIO_Pin);
}

void LED_Toggle(void)
{
	static u8 i;
	if(i == 0)
	{
		LED_ON();
		i=1;
	}
	else
	{
		LED_OFF();
		i=0;
	}
}

//cycle_ms 闪烁周期
//返回值1：LED已翻转
uint8_t LED_Flash(uint32_t cycle_ms)
{
	static uint32_t tickLast=0;
	uint32_t tickNow=0;
	
    tickNow = My_GetTick();
	if (tickNow-tickLast>(cycle_ms>>1))
	{
		LED_Toggle();
		tickLast=tickNow;
		return 1;
	}
	else
	{
		return 0;
	}
}


